طراحی مدل در جنگو
نوشتن یک برنامه تحت وب با جنگو
به خاطر این که جنگو در محیطی خبری و سریع ایجاد شده، هدف اصلی اش آسان تر شدن فرایند توسعه و برنامه نویسی تحت وب است. در این جا نگاهی کوتاه به طراحی مدل در جنگو و روش نوشتن یک برنامه تحت وب با جنگو خواهیم داشت:
هدف از این مقاله ارائه ی مشخصات فنی کامل برای فهم روش کاری با جنگو است و به عنوان مرجع آموزش جنگو می توان از آن استفاده کرد.
طراحی مدل
اگرچه می توان از جنگو بدون یک پایگاه داده استفاده کرد، این فریم ورک دارای یک نقشه بردار شی محور است که در آن، شما طرح پایگاه داده ای خود را با کد های Python مینویسید.
Syntax برنامه نویسی Data-Model به شما روش های زیادی را برای طراحی یک Model می دهد و مشکلات فریم ورک هایی که مبتنی بر پایگاه های داده هستند را حل نموده است. مثالی در این مورد را با هم بررسی می کنیم:

نصب کنید!
سپس، خط دستور جنگو را برای ایجاد جداول پایگاه داده ای به شکل اتوماتیک اجرا کنید:
$ python manage.py migrate
دستور مهاجرت (migrate)، تمامی مدل های موجود را بررسی کرده و در پایگاه داده ی شما جداولی ایجاد می کند که هم اکنون موجود نیستند. این فریم ورک امکانات مدیریتی بهتری برای این جداول برای شما ایجاد می کند.
از API رایگان لذت ببرید!
با فریم ورک جنگو شما می توانید از API های رایگان Python بهره ببرید. این API در همان لحظه ایجاد میشود و ایجاد کدهای جدید لازم نیستند.


یک رابط ADMIN دینامیک: مجموعه ای کامل
وقتی مدل هایتان را تعریف کردید، جنگو به شکل خودکار یک رابط مدیریتی Admin حرفه ای را برای وب سایت ایجاد می کند که به کاربران مجاز اجازه می دهد تا اشیا را اضافه، ویرایش و یا حذف کنند. این کار براحتی ثبت کردن مدل تان در سایت Admin می باشد:

فلسفه کار این است که سایت شما ممکن است توسط یک کارمند و یا مشتری ویرایش شود و دیگر نیازی نیست که شما همیشه برای ایجاد و مدیریت محتوا حضور داشته باشید.
یک برنامه ی کاری جنگو شامل ایجاد مدل ها و اجرای آن ها بر روی سایت های Admin است و کاربران سریعا می توانند تولید داده را انجام دهند. سپس، نحوه ی ارائه ی داده به مخاطبین را مشخص کنید.
URL های خود را طراحی کنید:
یک طرح URL تمیز و شیک با جزییات کامل در طراحی وب با کیفیت بسیار مهم است. جنگو طراحی URL زیبا را پیشنهاد می کند و از url های مثل PHP. و ASP. اخلال ایجاد نمی کند.
برای طراحی URL هایتان در یک برنامه، شما می توانید از فرمان URLconf استفاده کنید. یک جدول محتوا وجود دارد که الگو های URL شما را با توابع Python متصل می کند.این فرمان برای جداسازی از توابع Pyhton نیز کاربردی است.
نمونه ای از فرمان URLconf برای مثال reporter/articel بالا :

کد های بالا مسیر های URL را برای توابع Python را ثبت می کنند. از تگ Capture برای مقادیر URL ها استفاده شده است. وقتی یک کاربر صفحه ای را درخواست می کند، جنگو تمامی مسیر ها را گشته و اولین مسیری که با URL در خواستی مطابقت کند را ارائه خواهد کرد. (اگر موجود نباشد خطای 404 ارائه خواهد شد). این کار بسیار سریع انجام می شود و مسیر ها به شکل جملات معمولی در زمان اجرا بارگذاری می شوند.
وقتی URL متناسب پیدا شد، جنگو از تابع Python استفاده می کند. هر View دارای داده های متا مورد نظر است. برای مثال، اگر کاربری “/articles/2005/05/39323/” را فرابخواند, جنگو تابع زیر را اجرا خواهد کرد:
news.views.article_detail(request, year=2005, month=5, pk=39323)
خودتان VIEW ها را بنویسید!
هر view به عنوان یک تابع کارش یکی از این دو مورد است: برگرداندن یک شی httpRespone که محتوا صفحه ی درخواستی را در خود جای داده است و یا دستور خطای 404. بقیه کار با شماست.
به طورکلی، یک تابع View یک تمپلیت را را با داده های مورد نظر Render می کند. در ادامه مثالی در این زمینه را با هم بررسی می کنیم.

تمپلیت های خودتان را طراحی کنید:
کد های بالا تمپلیت news/year_archive.html را بارگذاری می کنند. جنگو دارای یک مسیر جستجوی تمپلیت است که به شما اجازه می دهد تا از جمع شدن تملیت های اضافی جلوگیری کنید. اگر یک تمپلیت در مسیر اول وجود نداشته باشد, مسیر دومی و سپس مسیر های بعدی بررسی می شوند.
فرض کنید تمپلیت news/year_archive.html پیدا شد. خواهیم داشت:

متغیر ها همیشه در بین {{ }} نوشته می شوند. {{artcicle.headline}} یعنی مقدار خروجی مثال های بالا. اما از نقطه ها استفاده نمی شود.
توجه داشته باشید که در {{ article.pub_date|date:”F j, Y” }} از یک خط صاف | استفاده شده است. این یک فیلتر تمپلیت خوانده می شود و روشی برای فیلتر کردن مقدار یک متغیر است. در این مورد، فرمت فیلتر داده یک شی Python است.
شما می توانید هر مقدار فیلتر را که خواستید در کدها قرار دهید. می توان فیلتر های متغیر نیز برای تمپلیت ها نوشت.
در نهایت، جنگو از مفهوم Template Inheritance ” ارثیه تمپلیت” استفاده می کند. این یعنی کاری که {% extends “base.html” %} انجام می دهد. به طور خلاصه یعنی به شما اجازه داده می شود تا موارد اضافی را از تمپلیت ها حذف کنید. هر تمپلیت فقط آنچه منحصر به خودش هست را تعریف می کند.
در نمونه ی زیر استفاده از فیلتر های استاتیک را برای base.html با هم بررسی می کنیم.

به شکل ساده باید گفت تمامی جوانب سایت توسط جنگو تحت پوشش قرار می گیرد. این کار طراحی مجدد را بسیار ساده تر می کند.
هم چنین به شما اجازه می دهد تا نخسه های متعددی از یک سایت با تمپلیت های مختلف داشته باشید. خالقین جنگو از این تکنیک برای طراحی نسخه های مختلف موبایلی از سایت ها استفاده می کنند.
توجه داشته باشید که اگر شما تمایل به استفاده از سیستم دیگری دارید نیازی به سیستم تمپلیت جنگو نیست. با وجود یکپارچه سازی خوب، لزومی بر استفاده از آن وجود ندارد. به همین شکل API جنگو نیز اجباری نیست. می توانید از یک لایه پایگاه داده ای دیگر استفاده کنید،فایل های XML را بخوانید و فایل ها را از روی یک دیسک فرابخوانید. هر تکه از جنگو( view ها، تمپلیت ها و مدل ها ) امکان جدا شدن از بقیه را دارند.
منبع: لرن فایلز